본문으로 건너뛰기

RAEDME

디자인 패턴

싱글톤 패턴

  • 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다.
  • 보통 데이터베이스 연결 모듈에 많이 사용된다.
const obj1 = {
a: 27,
};

const obj2 = {
b: 27,
};

클래스 코드

class Singleton {
constructor(){
if (!SingleTon.instance) {
SingleTon.instance = this
}
}

return Singleton.instance
}

const a = new Singleton()
const b = new Singleton()
console.log(a === b ) // true
  • 다만 싱글톤 패턴은 TDD시 독립적이지 못하여 단위 단위테스트시 문제가 발생한다.

의존성 주입

  • 모듈을 직접 주입하는 것이 아닌 메인모듈이 간접적으로 의존성을 주입하는 방식을 의미한다.

  • 이를 통해 상위 모듈은 하위 모듈에 대한 의존성이 떨어지며, 이를 디커플링이라 칭한다.

  • 다만 클래스 수가 늘어나서 런타임 패널티가 생기며 복잡성이 증대된다.

팩토리 패턴

  • 객체를 사용하는 코드에서 객체 생성 부분을 때어내 추상화한 패턴이다.

  • 상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 상위 클래스에서는 객체 생성 방식을 알 필요없다.

const a = new Object("3");

전략 패턴

  • 객체의 행위를 바꾸고 싶은 겨우 직접 수정하지 않고 컨텍스트 안에서 교체하면서 상호 교체가 가능케 하는 패턴이다.

옵저버 패턴

  • 객체의 상태 변화가 있을때마다 옵저버에게 변화를 알려주는 디자인 패턴이다.

js에선 프록시를 이용해서 생성할 수 있다.

  • 속성이 많아질때 프록시를 이용하면 쉽게 공지가 가능하다.

프록시란?

  • 객체에 접근하기전 그 접근을 필터링하거나 수정하는 역활을 가진다.
  • 이전에 노드 js는 버퍼 오버플로 문제때문에 전단에 프록시 서버가 권고되기도 하였다.
  • 또 전단에 cloudfare를 이용해 ddos나 https 구축에 사용할 수있따.

이터레이터 패턴

  • 이터레이터 패턴은 컬렉션의 요소들에 접근하는 디자인 패턴을 의미한다.
  • 이를 통해 순회할 수 있는 여러가지 자료형의 구조와 상관없이 이터레이터라는 하나의 인터페이스로 순회가 가능하다.

이터러블 프로토콜을 이용한 순회

js for let of 같은것을 이터러블 프로토콜이라 한다.

노출 모듈 패턴

  • public, private가 없는 자바스크립트의 특성상 접근 제어를 할 수 없다.
  • 이 때문에 접근 제어자를 만든다.

mvc

모델 - 컨트롤러 - 뷰

모델

  • 데이터베이스, 상수 , 변수가 들어간다.
  • 뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델 생성과 생신을 진행한다.

  • 사용자가 보는 인터페이스 요소를 의미한다.

컨트롤러

  • 모델과 뷰의 이음세이며 변경통지를 받으면 해당 요소를 알려준다.

mvvm

  • mvc에서 뷰를 더 추상화 한 것으로 커맨드와 데이터 양방향 데이터 바인딩을 가진다.

프로그래밍 방법론

함수형

  • 선언적 프로그래밍의 종류로 순수 함수를 이용해 블록 처럼 함수를 쌓아 로직을 구성한다.

객체지향

  • 객체를 기반으로 매서드를 활용해 프로그래밍 한다.
설계 원칙

단일 책임 : 모든 클래스는 단 하나의 책임만 가져야 한다.

개방 패쇠 : 기존의 코드는 잘 변경하지 않으면서 기능 확장은 가능해야한다.

리스코프 치환 : 부모 객체에 자식 객체를 넣어도 시스템에 문제가 없어야한다. ( 부모 요소를 사용하는곳에 자식을 넣어도 문제가 없어야한다.)

인터페이스 : 일반적 인터페이스보다 여러개의 구체적 인터페이스를 만들어야한다.

의존 역전 법칙 : 상위 계층은 하위 게층에 변화로부터 독립적이여야한다. // 자식으로 부모를 바꾸면 안된다.

절차

  • 절차대로 로직을 작성하는 프로그래밍 방법